#ifndef M__UTIL__HPP__
#define M__UTIL__HPP__

#include <iostream>
#include <ctime>
#include <string>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

namespace mjwlog
{
    namespace util
    {
        class Date
        {
        public:
            static time_t gettime()
            {
                return time(nullptr);
            }
        };
        class File
        {
        public:
            static bool exists(const std::string &pathname) // 判断文件是否存在
            {
                // 判断方法1：使用access函数，如果返回0，说明文件存在，否则不存在--跨平台不好
                // return (access(pathname.c_str(),F_OK)==0);

                // 判断方法2：使用stat函数，如果返回0，说明文件存在，否则不存在--跨平台好
                struct stat st;
                return (stat(pathname.c_str(), &st) == 0);
            }

            static std::string path(const std::string &pathname) // 获取文件所在的目录路径
            {
                // abc/bcd.exe
                size_t pos = pathname.find_last_of("/\\"); // 匹配到任何一个都停下
                if (pos == std::string::npos)
                    return ".";                     // 没有找到，返回当前目录"."
                return pathname.substr(0, pos + 1); // 顺便连/也一起返回了
            }

            static void createDirectory(const std::string &pathname) // 创建目录
            {
                // ./abc/bcd/cde 逐步的创建目录--先创建./ 再创建./abc/ 再创建./abc/bcd/ 再创建./abc/bcd/cde/
                size_t pos = 0, idx = 0;
                while (idx < pathname.size())
                {
                    pos = pathname.find_first_of("/\\", idx); // 从idx位置开始寻找
                    if (pos == std::string::npos)
                    {
                        // 没有找到，说明pathname是个文件名，直接创建当前目录
                        mkdir(pathname.c_str(), 0777);
                    }
                    std::string parent_dir = pathname.substr(0, pos + 1); // 顺便连/也一起返回了
                    if (exists(parent_dir) == true)   // 如果父目录存在，则跳过
                    {
                        idx = pos + 1;
                        continue;
                    }
                    mkdir(parent_dir.c_str(),0777);//创建父目录
                    idx=pos+1;
                }
            }
        };
    }
}
#endif